package com.yx.fmmall.config;

import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * @Classname SwaggerConfig
 * @Date 2022/01/11 23:58
 * @Author by yx
 * @Description : swagger配置类
 */
@Configuration
@EnableOpenApi // 开启swagger3
@EnableKnife4j // 开启Knife4j
@EnableWebMvc // springBoot2.6将默认SpringMvc默认路径匹配策略从AntPathMather更改为PathPatternparser 使用注解切换至AntPathMather
public class SwaggerConfig {
    /**
     * Swagger会自动生成接口文档
     * 1. 配置文档信息
     * 2. 配置生成规则
     */

    /*Docket封装接口文档信息*/
    @Bean
    public Docket getDocket() {
        return new Docket(DocumentationType.OAS_30) // 指定文档风格
                .apiInfo(apiInfo()) // 指定生成的文档中的封面信息: 文档标题,版本,作者等
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.yx.fmmall.controller"))
//                .paths(PathSelectors.regex("/user/")) // 为指定路径生成文档
                .paths(PathSelectors.any()) // 为所有路径生成文档
                .build();
    }

    // 使用工厂模式获取接口.抽象类对象
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("fmmall后端接口说明") // 页面标题
                .version("v3.0") // 版本号
                .description("此文档详细描述了fmmall项目后端接口规范") // 描述
                .contact(new Contact("yx", "www.yx.com", "yx@fmmall.com")) // 作者信息
                .build();
    }

}
